import { post, get } from '@/utils/request';

// 查询报告参数接口
export interface SelectGenerateReportParams {
  type?: number | string; // 类型（1全公司，2当前部门，3自己的微信）
  startTime?: string; // 开始时间
  endTime?: string; // 结束时间
  myWxId?: string; // 自己微信id
  current?: number; // 当前页
  size?: number; // 页面大小
}

// 生成报告参数接口
export interface GenerateReportParams {
  type: number | string; // 类型（1全公司，2当前部门，3自己的微信）
  startTime: string; // 开始时间
  endTime: string; // 结束时间
  myWxId: string; // 自己微信id
}

// 报告项接口
export interface ReportItem {
  id: number;
  account_type: string;
  data: string;
  time: string;
  type: string;
  wx_id: string;
}

// 报告列表项接口
export interface ReportListItem {
  id: number;
  account_type: string;
  time: string;
  type: string;
  wx_id: string;
  status?: string; // 报告状态：generating(生成中), completed(已完成), failed(失败)
}

// 分页响应接口
export interface PageResponse<T> {
  records: T[];
  total: number;
  current: number;
  size: number;
}

// API响应接口
export interface ApiResponse<T = any> {
  code: number;
  msg: string;
  data: T;
}

/**
 * 查询生成报告
 * @param params 查询参数
 * @returns Promise<ApiResponse<ReportItem>>
 */
export function selectGenerateReport(params: SelectGenerateReportParams): Promise<ApiResponse<ReportItem>> {
  return get({
    url: '/msg/selectGenerateReport',
    data: params
  });
}

/**
 * 生成报告
 * @param params 生成报告参数
 * @returns Promise<ApiResponse<any>>
 */
export function generateReport(params: GenerateReportParams): Promise<ApiResponse<any>> {
  return post({
    url: '/msg/generateReport',
    data: params
  });
}

/**
 * 删除报告
 * @param id 报告ID
 * @returns Promise<ApiResponse<any>>
 */
export function deleteReport(id: string): Promise<ApiResponse<any>> {
  return post({
    url: '/msg/deleteReport',
    data: { id }
  });
}

/**
 * 下载报告
 * @param id 报告ID
 * @returns Promise<ApiResponse<any>>
 */
export function downloadReport(id: string): Promise<ApiResponse<any>> {
  return get({
    url: '/msg/downloadReport',
    data: { id }
  });
}

/**
 * 获取报告列表
 * @param params 查询参数
 * @returns Promise<ApiResponse<PageResponse<ReportListItem>>>
 */
export function getReportList(params: SelectGenerateReportParams): Promise<ApiResponse<PageResponse<ReportListItem>>> {
  return get({
    url: '/msg/getReportList',
    data: params
  });
}
